.TH SG_TIMESTAMP "8" "April 2018" "sg3_utils\-1.43" SG3_UTILS
.SH NAME
sg_timestamp \- report or set timestamp on SCSI device
.SH SYNOPSIS
.B sg_timestamp
[\fI\-\-elapsed\fR] [\fI\-\-help\fR] [\fI\-\-hex\fR]
[\fI\-\-milliseconds=MS\fR] [\fI\-\-no\-timestamp\fR] [\fI\-\-origin\fR]
[\fI\-\-raw\fR] [\fI\-\-readonly\fR] [\fI\-\-seconds=SECS\fR] [\fI\-\-srep\fR]
[\fI\-\-verbose\fR] [\fI\-\-version\fR] \fIDEVICE\fR
.SH DESCRIPTION
.\" Add any additional description here
Sends a SCSI REPORT TIMESTAMP or SET TIMESTAMP command to the \fIDEVICE\fR.
These commands are found in the SPC\-5 draft standard revision
7 (spc5r07.pdf).
.PP
If either the \fI\-\-milliseconds=MS\fR or \fI\-\-seconds=SECS\fR option is
given (and both can't be given) then the SET TIMESTAMP command is sent;
otherwise the REPORT TIMESTAMP command is sent.
.PP
The timestamp is sent and received from the \fIDEVICE\fR as the number of
milliseconds since the epoch of 1970\-01\-01 00:00:00 UTC and is held in a 48
bit unsigned integer. That same epoch is used by Unix machines, but they
usually hold the number of seconds since that epoch. The Unix date command
and especially its "+%s" format is useful in converting to and from
timestamps and more humanly readable forms. See the EXAMPLES section below.
.PP
A companion utility called sg_sat_datetime with similar options is available
to access or set the date and time in an ATA device (typically a SATA disk).
sg_sat_datetime issues ATA commands via the SCSI to ATA Translation (SAT)
layer.
.SH OPTIONS
Arguments to long options are mandatory for short options as well.
.TP
\fB\-e\fR, \fB\-\-elapsed\fR
assume the timestamp in the REPORT TIMESTAMP is an elapsed time from an
event such as a power cycle or hard reset and format the output as '<n>
days hh:mm:ss.xxx' where hh is hours (00 to 23 inclusive); mm is
minutes (00 to 59 inclusive); ss is seconds (00 to 59 inclusive) and xxx
is milliseconds (000 to 999 inclusive). If the number of days is 0
then '0 days' is not output unless this option is given two or more times.
.TP
\fB\-h\fR, \fB\-\-help\fR
output the usage message then exit.
.TP
\fB\-H\fR, \fB\-\-hex\fR
output the response to REPORT TIMESTAMP in ASCII hexadecimal on stderr. The
response is not decoded.
.TP
\fB\-m\fR, \fB\-\-milliseconds\fR=\fIMS\fR
where \fIMS\fR is the number of milliseconds since 1970\-01\-01 00:00:00 UTC
to set in the \fIDEVICE\fR with the SCSI SET TIMESTAMP command.
.TP
\fB\-N\fR, \fB\-\-no\-timestamp\fR
when REPORT TIMESTAMP is called this option suppress the output of the
timestamp value (in either seconds or milliseconds). This may be useful
in uncluttering the output when trying to decode the timestamp origin (see
the \fI\-\-origin\fR option).
.TP
\fB\-o\fR, \fB\-\-origin\fR
the REPORT TIMESTAMP returned parameter data contains a "timestamp origin"
field. When this option is given, that field is decoded and printed out
before the timestamp value is output. The default action (i.e. when the
option is not given) is not to print out this decoded field.
.br
T10 defines this field as "the most recent event that initialized the
returned device clock". The value 0 indicates a power up of hard reset
initialized the clock; 2 indicates a SET TIMESTAMP initialized the
clock while 3 indicates some other method initialized the clock.
.br
When used once a descriptive string is output (in a line before the
timestamp value). When used twice the value of the TIMESTAMP ORIGIN
field is output (in decimal, a value between 0 and 7 inclusive). When
used thrice a line of the form 'TIMESTAMP_ORIGIN=<value>' is output.
.TP
\fB\-r\fR, \fB\-\-raw\fR
output the SCSI REPORT TIMESTAMP response (i.e. the data\-out buffer) in
binary (to stdout). Note that the \fI\-\-origin\fR and \fI\-\-srep\fR
options are ignored when this option is given. Also all error and
verbose messages are output to stderr.
.TP
\fB\-R\fR, \fB\-\-readonly\fR
open the \fIDEVICE\fR read\-only. The default action is to open the
\fIDEVICE\fR read\-write.
.TP
\fB\-s\fR, \fB\-\-seconds\fR=\fISECS\fR
where \fISECS\fR is the number of seconds since 1970\-01\-01 00:00:00 UTC
to set in the \fIDEVICE\fR with the SCSI SET TIMESTAMP command. \fISECS\fR
is multiplied by 1000 before being used in the SET TIMESTAMP command.
.TP
\fB\-S\fR, \fB\-\-srep\fR
report the number of seconds since 1970\-01\-01 00:00:00 UTC. This is done
by dividing by 1000 the value returned by the SCSI REPORT TIMESTAMP command.
.TP
\fB\-v\fR, \fB\-\-verbose\fR
increase the level of verbosity, (i.e. debug output).
.TP
\fB\-V\fR, \fB\-\-version\fR
print the version string and then exit.
.SH EXIT STATUS
The exit status of sg_timestamp is 0 when it is successful. Otherwise see
the sg3_utils(8) man page.
.SH NOTES
The TCMOS and the SCSIP bits in the Control extension mode page (see sdparm)
modify the actions of the timestamp held by a \fIDEVICE\fR.
.PP
Currently only the "Utilization usage rate based on date and time" parameters
within the Utilization log page (sbc4r09.pdf) use timestamps. See the sg_logs
utility. Vendor specific commands and pages may also be using timestamps.
.SH EXAMPLES
On Unix machines (e.g. Linux, FreeBSD and Solaris) the date command is useful
when working with timestamps.
.PP
To fetch the timestamp from a \fIDEVICE\fR and display it in a humanly
readable form the following could be used:
.PP
   # sg_timestamp \-S /dev/sdb
   1448993950
   # date \-\-date=@1448993950
   Tue Dec  1 13:19:10 EST 2015
   # date \-R \-\-date="@1448993950"
   Tue, 01 Dec 2015 13:19:10 \-0500
.PP
The latter two date commands show different forms of the same date (i.e.
1448993950 seconds since 1970\-01\-01 00:00:00 UTC). The sg_timestamp and
date commands can be combined using backquotes:
.PP
   # date \-R \-\-date=@`sg_timestamp \-S /dev/sdc`
   Wed, 16 Dec 2015 20:12:59 \-0500
.PP
To set the timestamp on the \fIDEVICE\fR to now (approximately) the
following could be used:
.PP
   # date +%s
   1448993955
   # sg_timestamp \-\-seconds=1448993955 /dev/sdb
.PP
Those two command lines could be combined into one by using backquotes:
.PP
   # sg_timestamp \-\-seconds=`date +%s` /dev/sdb
.SH AUTHORS
Written by Douglas Gilbert.
.SH "REPORTING BUGS"
Report bugs to <dgilbert at interlog dot com>.
.SH COPYRIGHT
Copyright \(co 2015\-2018 Douglas Gilbert
.br
This software is distributed under a BSD\-2\-Clause license. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
.SH "SEE ALSO"
.B sdparm(sdparm), sg_logs(sg3_utils), sg_sat_datetime(sg3_utils)
